home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 12 - 1996 / 12.11 Nov 96 / DebuggingStarter Code / DebugLeaks.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-09-05  |  4.0 KB  |  170 lines  |  [TEXT/CWIE]

  1. /*________________________________________________________________________________
  2. ________________________________________________________________________________*/
  3.  
  4. #pragma once
  5.  
  6.  
  7. #if ! DEBUG
  8.     #undef USE_SYM_DEBUG_LEAKS
  9.     #define USE_SYM_DEBUG_LEAKS        0
  10. #endif
  11.  
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15.  
  16.  
  17. #if USE_DEBUG_LEAKS    // [
  18.  
  19. // stack crawl requires A6 frames
  20. #ifdef __MWERKS__
  21.     #if GENERATING68K
  22.         #pragma a6frames on
  23.     #endif
  24. #endif
  25.  
  26. // this enum can be used to describe which routine allocated the item
  27. // in question.  By remembering exactly which routine made the allocation,
  28. // tracking down the offending code is easier.
  29. typedef enum
  30. {
  31.     kLeaks_NewHandle = 0,
  32.     kLeaks_NewHandleClear,
  33.     kLeaks_NewHandleSys,
  34.     kLeaks_NewHandleSysClear,
  35.     kLeaks_HandToHand,
  36.     kLeaks_TempNewHandle,
  37.     kLeaks_PtrToHand,
  38.     
  39.     kLeaks_NewPtr,
  40.     kLeaks_NewPtrClear,
  41.     kLeaks_NewPtrSys,
  42.     kLeaks_NewPtrSysClear,
  43.     
  44.     kLeaks_NewRgn,
  45.     
  46.     kLeaks_DetachResource,
  47.     kLeaks_RemoveResource,
  48.     
  49.     kLeaks_GetMenuBar,
  50.     kLeaks_GetNewMBar,
  51.     kLeaks_NewMenu,
  52.     
  53.     kLeaks_NewWindow,
  54.     kLeaks_NewCWindow,
  55.     kLeaks_GetNewWindow,
  56.     kLeaks_GetNewCWindow,
  57.     
  58.     kLeaks_NewDialog,
  59.     kLeaks_GetNewDialog,
  60.     
  61.     kLeaks_OperatorNew,
  62.     
  63.     kLeaks_NewIconSuite,
  64.     kLeaks_GetIconSuite,
  65.     
  66.     kLeaks_ManualHandle,
  67.     kLeaks_ManualPtr,
  68.     kLeaks_ManualObject,
  69.     
  70.     kLeaks_NewAlias,
  71.     kLeaks_NewAliasMinimal,
  72.     kLeaks_NewAliasMinimalFromFullPath,
  73.  
  74.     kLeaks_AECreateDesc,
  75.     kLeaks_AECoercePtr,
  76.     kLeaks_AECoerceDesc,
  77.     kLeaks_AEDuplicateDesc,
  78.     kLeaks_AECreateList,
  79.     kLeaks_AEGetNthDesc,
  80.     kLeaks_AEGetParamDesc,
  81.     kLeaks_AEGetAttributeDesc,
  82.     kLeaks_AECreateAppleEvent,
  83.     kLeaks_AESend,
  84.     kLeaks_AEGetTheCurrentEvent,
  85.     kLeaks_AEResolve,
  86.     kLeaks_CreateOffsetDescriptor,
  87.     kLeaks_CreateCompDescriptor,
  88.     kLeaks_CreateLogicalDescriptor,
  89.     kLeaks_CreateObjSpecifier,
  90.     kLeaks_CreateRangeDescriptor,
  91.     
  92.     kLeaks_Dummy
  93. } DebugLeaksHowAllocated;
  94.  
  95.  
  96. void    DebugLeaks_Init( void );
  97. void    DebugLeaks_Dispose( void );
  98. void    DebugLeaks_StartSession( UInt32 maxItemsToTrack, ConstStr255Param sessionName);
  99. void    DebugLeaks_StopSession( void );
  100. void    DebugLeaks_SuspendSession( void );
  101. void    DebugLeaks_ResumeSession( void );
  102.  
  103. void    DebugLeaks_RememberHandle( Handle theHandle, DebugLeaksHowAllocated how, const char *srcFileName);
  104. void    DebugLeaks_ForgetHandle( Handle theHandle );
  105.  
  106. void    DebugLeaks_RememberPtr( void    *thePtr, DebugLeaksHowAllocated how, const char *srcFileName);
  107. void    DebugLeaks_ForgetPtr( void *thePtr );
  108.  
  109. void    DebugLeaks_RememberAEDesc( AEDesc *theAEDesc, DebugLeaksHowAllocated how, const char *srcFileName);
  110. void    DebugLeaks_ForgetAEDesc( AEDesc *theAEDesc );
  111.  
  112. void    DebugLeaks_RememberObject( void *object, UInt32 size);
  113. void    DebugLeaks_ForgetObject( void *object );
  114.  
  115. Boolean    DebugLeaks_ItemIsRemembered( const void *handleOrPtr );
  116.  
  117. void    DebugLeaks_RefreshStackInfo( void *handleOrPtr );
  118.  
  119.  
  120. void    DebugLeaks_DisposingHandle( Handle h );
  121. void    DebugLeaks_DisposingPtr( Ptr p );
  122.  
  123. void    DebugLeaks_IgnoreItem( const void *item);
  124.  
  125. #else // ] USE_DEBUG_LEAKS [
  126.  
  127.  
  128. #define DebugLeaks_Init()                        {/* nothing */}
  129. #define DebugLeaks_Dispose()                    {/* nothing */}
  130. #define DebugLeaks_StartSession(x, y)            {/* nothing */}
  131. #define DebugLeaks_StopSession()                {/* nothing */}
  132. #define DebugLeaks_SuspendSession()                {/* nothing */}
  133. #define DebugLeaks_ResumeSession()                {/* nothing */}
  134.  
  135. #define DebugLeaks_RememberHandle(x, y, s)        {/* nothing */}
  136. #define DebugLeaks_ForgetHandle(h)                {/* nothing */}
  137. #define DebugLeaks_RememberPtr( x, y, s)        {/* nothing */}
  138. #define DebugLeaks_ForgetPtr( x )                {/* nothing */}
  139. #define DebugLeaks_RememberAEDesc(x, y, s)        {/* nothing */}
  140. #define DebugLeaks_ForgetAEDesc(x)                {/* nothing */}
  141. #define DebugLeaks_RememberObject( x, y)        {/* nothing */}
  142. #define DebugLeaks_ForgetObject( x )            {/* nothing */}
  143. #define DebugLeaks_ItemIsRemembered( x )        ( false )
  144. #define DebugLeaks_RefreshStackInfo( x )        {/* nothing */}
  145.  
  146. #define DebugLeaks_DisposingHandle( x )            {/* nothing */}
  147. #define DebugLeaks_DisposingPtr( x )            {/* nothing */}
  148.  
  149. #define DebugLeaks_IgnoreItem( x )                {/* nothing */}
  150.  
  151.  
  152. #endif // ] USE_DEBUG_LEAKS
  153.  
  154.  
  155.  
  156. #ifdef __cplusplus
  157. }
  158. #endif
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.